package br.com.requisicao.compra.dao.impl;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import br.com.requisicao.compra.canonico.Filtro;
import br.com.requisicao.compra.canonico.PedidoCotacao;
import br.com.requisicao.compra.dao.IPedidoCotacaoDAO;
import br.com.requisicao.compra.util.HibernateUtil;

public class PedidoCotacaoDAO implements IPedidoCotacaoDAO {

	public PedidoCotacao salvar(PedidoCotacao pedidoCotacao) {
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		try {
			session.save(pedidoCotacao);
			tx.commit();
			session.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public void update(PedidoCotacao pedidoCotacao) {
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		try {
			session.update(pedidoCotacao);
			tx.commit();
			session.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public PedidoCotacao excluir(PedidoCotacao pedidoCotacao) {
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		try {
			// session.setCacheMode(CacheMode.IGNORE);
			session.delete(pedidoCotacao);
			tx.commit();
			session.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public List<PedidoCotacao> obtemPedidoCotacao(Filtro filtro) {

		Session session = HibernateUtil.getSession();

		Long codigoPedidoCotacao = null;

		Set<String> listaMostraUsuarioAux = new HashSet<String>();
		List<PedidoCotacao> listaMostraUsuario = new ArrayList<PedidoCotacao>();
		List<PedidoCotacao> lista = null;

		try {

			Criteria criteria = session.createCriteria(PedidoCotacao.class);

			if (filtro.getCodigo() != null && !"".equals(filtro.getCodigo())) {
				criteria.add(Restrictions.eq("codigo", Long.valueOf(filtro.getCodigo())));
			}

			if (filtro.getStatus() != null && !"".equals(filtro.getStatus())) {
				criteria.add(Restrictions.eq("statusPedido", filtro.getStatus()));
			}

			if (filtro.getDataFinal() != null && filtro.getDataFinal() != null) {
				criteria.add(Restrictions.between("data", filtro.getDataInicial(), filtro.getDataFinal()));
			}

			lista = (List<PedidoCotacao>) criteria.list();

			for (PedidoCotacao pedidoCotacao : lista) {
				codigoPedidoCotacao = pedidoCotacao.getCodigo();
				listaMostraUsuarioAux.add(String.valueOf(codigoPedidoCotacao));
			}

			for (PedidoCotacao pedidoCotacao : lista) {

				if (listaMostraUsuarioAux.contains(String.valueOf(pedidoCotacao
						.getCodigo()))) {

					listaMostraUsuario.add(pedidoCotacao);
					listaMostraUsuarioAux.remove(String.valueOf(pedidoCotacao
							.getCodigo()));
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			session.close();
		}
		return listaMostraUsuario;

	}

}
